package common

import (
	"io/ioutil"
	"net/http"
	"os"
	"strings"
)

type pathInvalidUserError string

//pathInvalidUserError实现了Error接口,也就实现了error, 这里的pathInvalidUserError 和errorHandle.go的userError
//是两不同的东西。这里的pathInvalidUserError只管实现了web.go的userError中定义的方法和对象就可

func (e pathInvalidUserError) Error() string{
	return e.Message() //调了下面的方法
}

//pathInvalidUserError实现了Message
func (e pathInvalidUserError) Message() string{
	return string(e)
}


const prefix  = "/list/"
func HandleError(writer http.ResponseWriter, request *http.Request) error{
	if strings.Index(request.URL.Path, prefix) != 0 {
		//因为上面Error方法实现了error的接口，这里pathInvalidUserError已经是个对象
		return pathInvalidUserError("path must start with "+ prefix)
	}
	filePath := request.URL.Path[len(prefix):]
	file, err := os.Open(filePath)
	if err !=nil {
		return err
	}
	defer file.Close()
	bytes, err := ioutil.ReadAll(file)
	if err !=nil {
		return err
	}
	writer.Write(bytes)
	return nil
}